.\" (C) Copyright Sridhar Samudrala IBM Corp. 2004, 2005.
.\"
.\" Permission is granted to distribute possibly modified copies
.\" of this manual provided the header is included verbatim,
.\" and in case of nontrivial modification author and date
.\" of the modification is added to the header.
.\"
.TH SCTP_SENDMSG 3 2004-10-25 "Linux 2.6" "Linux Programmer's Manual"
.SH NAME
sctp_sendmsg \- Send a message from a SCTP socket. 
.SH SYNOPSIS
.nf
.B #include <sys/types.h>
.B #include <sys/socket.h>
.B #include <netinet/sctp.h>
.sp
.BI "int sctp_sendmsg(int " sd ", const void * " msg ", size_t " len ,
.BI "                 struct sockaddr *" to ", socklen_t " tolen , 
.BI "                 uint32_t " ppid ", uint32_t " flags ,
.BI "                 uint16_t " stream_no ", uint32_t " timetolive ,
.BI "                 uint32_t " context );
.fi
.SH DESCRIPTION
.BR sctp_sendmsg
is a wrapper library function that can be used to send a message from a socket
while using the advanced features of SCTP. 
.I sd
is the socket descriptor from which the message pointed to by
.I msg
of length
.I len
is sent.
.I to
is the destination address of the message and
.I tolen
is the length of the destination address.
.I stream_no
identifies the stream number that the application wishes to send this message to.
.I flags
parameter is composed of a bitwise OR of the following values.
.TP
.B SCTP_UNORDERED
This flags requests the un-ordered delivery of the message.
.TP
.B SCTP_ADDR_OVER
This flag, in the one-to-many style, requests the SCTP stack to override the
primary destination address with address specified in
.I to.
.TP
.B SCTP_ABORT
Setting this flag causes the specified association to abort by sending an ABORT
message to the peer(one-to-many style only). The ABORT chunk will contain an
error cause 'User Initiated Abort' with cause code 12. The cause specific
information of this error cause is provided in
.I msg.
.TP
.B SCTP_EOF
Setting this flag invokes the SCTP graceful shutdown procedure on the specific
association(one-to-many style only).
.TP
.B SCTP_SENDALL
This flag, if set, will cause a one-to-many style socket to send the message
to all associations that are currently established on this socket. For the
one-to-one style socket, this flag has no effect.
.TP
.B SCTP_SACK_IMMEDIATELY
This flag allows the application to set the I bit of the last DATA chunk when
sending each user message to make sure the corresponding SACK can be sent by
peer without delay.
.TP
.B SCTP_PR_SCTP_{TTL|RTX|PRIO}
One of these 3 pr_policies can be used through this flag with its pr_value
set in timetolive parameter for this message. Note that
.B sctp_sendv(3)
with infotype SCTP_SENDV_PRINFO also works for PR-SCTP.
.PP
.I timetolive
specifies the time duration in milliseconds. The sending side will expire the
message if the message has not been sent to the peer within this time period.
A value of 0 indicates that no timeout should occur on this message. It also
works as the pr_value if flags parameter is set to pr_policy.
.I ppid
is an opaque unsigned value that is passed to the remote end along with the
message.
.I context
is a 32 bit opaque value that is passed back to the upper layer along with the
undelivered message if an error occurs on the send of the message.
.SH "RETURN VALUE"
On success,
.BR sctp_sendmsg
returns the number of bytes sent or -1 if an error occurred.
.SH "SEE ALSO"
.BR sctp (7)
.BR sctp_bindx (3),
.BR sctp_connectx (3),
.BR sctp_sendv (3),
.BR sctp_send (3),
.BR sctp_recvmsg (3),
.BR sctp_recvv (3),
.BR sctp_peeloff (3),
.BR sctp_getpaddrs (3),
.BR sctp_getladdrs (3),
.BR sctp_opt_info (3),
